闲话 22.10.25

闲话

今天又抱泠了(

文件:sandalphon*.in/out; lambentlight*.in/out; excalibur*.in/out
soytony:这种nb文件名直接敲错
我:这文件名显然是打不错的(

然后T2光荣地打成了lambertlight调了半个小时发现没有读入
回去一定要再看一遍刀剑

好耶生活水平大幅度提升

显摆显摆

image


だけど気付くだろう

豆色の空も

悪くはないななんて言うだろう

そんなものなのさ

この広い空ですら

关于多项式?

启发式合并多项式

考虑一类形如

fi,j=k=0jfi1,jkgk

的 dp 式子。我们需要求 fn,k,其中 1kn105

比较平凡地构造 Fi(x)=j=1fi,j,G(x)=i=1gi,于是在 dp 式两端关于 j 求和能得到 Fi(x)=Fi1(x)G(x)

这个玩意可以直接多项式快速幂求 [xk](G(x))n 得到。复杂度比较常识。

推广就得到了

fi,j=k=0jfi1,jkgi1,k

然后对 G(x) 也整个下标就行了。一般而言 g 有意义的取值只有 O(n) 个,因此可以直接把 Gi(x) 乘起来,每次选两个度数最小的。启发式的复杂度不会证,当有 O(n) 个多项式时似乎 O(nlog2n) 的复杂度显然。其他情况不会证。没准证明能写社论(

这段其实是炒冷饭。具体看社论1009.

分治 FFT

考虑优化一下这个东西的复杂度。我们从压位 trie 那里得到灵感,试着将 FFT 的分治树拓展叉数。

考虑 B 叉的 FFT。

普通 FFT 需要让每个子树的值对后面的所有子树作贡献,因此我们需要对每个叉做 O(B) 次多项式乘法,每次是 nBlognB 的复杂度,因此在每个点有 O(BnlognB)
递归式列出是

T(n)=B×T(nB)+O(BnlognB)

得到 B=2 时最优。

你玩我呢??!
先冷静,我们接着考虑。

我们真的需要对每两个子树算一次贡献吗?答案是不用。
我们可以直接把每个子树的多项式用点值方式存储,对于一个子树前面的各子树的贡献可以先存起来,最后用一次 FFT 转换就行了。由于两两贡献,我们需要统计每两个子树间的乘积,因此这部分是 O(B2nB) 的。对于 G 的部分可以提前算出来,我们只需要做 O(B) 次多项式乘法。
总的来说需要 O(BnBlognB+B2nB)=O(nB+nlognB)

递归式列出是

T(n)=B×T(nB)+O(nB+nlognB)

得到 B=logn 时最优,是 O(nlognloglogn) 的。

这个好(

skip2004说可以使用指令集科技,然后跑 4e6 的 exp 只需要 1.5s
我只想贺这份板子(

[实现先不放,我分治FFT没调出来]

posted @   joke3579  阅读(73)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示